package com.baizhi.extendx;

public class ExtendxDemo {

    public static void main(String[] args) {
        //创建一个猫的对象
        // 子类对象可以访问父类中允许访问的成员变量和方法
        //子类对象也可以访问自己独有的成员变量和方法
        Cat cat = new Cat();
        cat.name = "咪咪";
        cat.age = 2;
        cat.color = "黄色";
        cat.type = "波斯猫";

        cat.eat(); //访问父类的成员方法
        cat.catchMouse(); //访问自己独有的成员方法

        System.out.println("---------------");

        Dog dog = new Dog();
        dog.type = "金毛";
        dog.name = "旺财";
        dog.age = 3;
        dog.color = "金色";

        dog.eat();
        dog.bark();

        System.out.println("-------------------");

        //父类对象只能调用父类中的成员变量和方法
        //父类不能调用子类的成员变量和方法
        Pet pet = new Pet();
        pet.name = "小花";
        pet.age = 3;
        pet.color = "黑色";


        pet.eat();


        BlueCat bc = new BlueCat();
        bc.type = "蓝猫";
        bc.name = "大黄";
        bc.age = 1;
        bc.eat(); //调用间接父类的方法
        bc.catchMouse(); //调用直接父类的方法

    }
}


/**
 * 宠物类
 */
class Pet{
    String  type;  //品种
    String name;   //名字
    int age;      //年龄
    String color; //毛色

    /**
     * 功能：吃东西
     */
    public void eat(){
        System.out.println("在吃东西");
    }
}


class Rabbit extends Pet{

    /**
     * 跳
     */
    public void jump(){
        System.out.println("兔子在蹦蹦跳跳");
    }
}



/**
 * 猫类， 猫是一种宠物， is a
 * 通过extends关键字，让Cat类和Pet类发生关系，这种关系就是继承
 * Pet:父类/基类/超类
 * Cat:子类/派生类
 */
class Cat extends Pet{

    /**
     * 功能：抓老鼠
     */
    public void  catchMouse(){
        System.out.println("这只猫抓到了一只老鼠");
    }

}

/**
 * 狗类
 */
class Dog extends Pet{

    /**
     * 功能：叫唤
     */
    public void bark(){
        System.out.println("这只狗在朝着陌生人汪汪汪的叫");
    }
}


//蓝猫  蓝猫是一只猫 可以直接继承Cat
//对于BlueCat来说，它的直接父类是Cat, 间接父类就是Pet,
class BlueCat extends Cat{}